From 0511fc56e7017209ad18d16551ccaad05de9486c Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Mon, 8 May 2017 23:12:49 +0200
Subject: [PATCH] Make EGL support optional

It is perfectly possible to build Mesa3D with just OpenGL support, and
use with GLX in X.org, without having EGL/OpenGLES support.

However, libepoxy currently unconditionally requires EGL support in its
configure.ac, which causes a build failure when Mesa3D only provides
full OpenGL support:

checking for EGL... no
configure: error: Package requirements (egl) were not met:

Package egl was not found in the pkg-config search path.
Perhaps you should add the directory containing `egl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'egl', required by 'world', not found

This commit fixes that by:

 - Adjusting the configure.ac to add a --{enable,disable}-egl option
   handled in the exact same way as --{enable,disable}-glx

 - Adjusting the meson build logic in the same way.

 - Adjusting src/dispatch_common.h to define PLATFORM_HAS_EGL correctly,
   which allows to not include any EGL related header file if EGL
   support is not enabled.

Submitted-upstream: https://github.com/anholt/libepoxy/pull/123
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 configure.ac          | 33 ++++++++++++++++++++++++++++-----
 meson.build           | 21 ++++++++++++++++++---
 meson_options.txt     |  5 +++++
 src/dispatch_common.h |  8 ++++----
 4 files changed, 55 insertions(+), 12 deletions(-)

diff --git a/configure.ac b/configure.ac
index 31b0985..2dbecd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -88,11 +88,35 @@ AS_CASE([$enable_glx],
   [AC_MSG_ERROR([Invalid value "$enable_glx" for option "--enable-glx"])]
 ])
 
-# The remaining platform specific API for GL/GLES are enabled
-# depending on the platform we're building for
+AC_ARG_ENABLE([egl],
+              [AC_HELP_STRING([--enable-egl=@<:@auto,yes,no@:>@], [Enable EGL support @<:@default=auto@:>@])],
+              [enable_egl=$enableval],
+              [enable_egl=auto])
+
+AS_CASE([$enable_egl],
+  [auto], [
+    AS_CASE([$host_os],
+            [mingw*], [build_egl=no],
+            [darwin*], [build_egl=no],
+            [android*], [build_egl=no],
+            [build_egl=yes])
+  ],
+
+  [yes], [
+    build_egl=yes
+  ],
+
+  [no], [
+    build_egl=no
+  ],
+
+  [AC_MSG_ERROR([Invalid value "$enable_egl" for option "--enable-egl"])]
+])
+
+# The remaining platform specific API are enabled depending on the
+# platform we're building for
 AS_CASE([$host_os],
   [mingw*], [
-    build_egl=no
     build_wgl=yes
     has_znow=yes
     # On windows, the DLL has to have all of its functions
@@ -108,7 +132,6 @@ AS_CASE([$host_os],
   ],
 
   [darwin*], [
-    build_egl=no
     build_wgl=no
     build_apple=yes
     has_znow=no
@@ -116,7 +139,6 @@ AS_CASE([$host_os],
   ],
 
   [
-    build_egl=yes
     build_wgl=no
     has_znow=yes
     # On platforms with dlopen, we load everything dynamically and
@@ -131,6 +153,7 @@ AM_CONDITIONAL(BUILD_EGL, test x$build_egl = xyes)
 if test x$build_egl = xyes; then
     PKG_CHECK_MODULES(EGL, [egl])
     AC_DEFINE([BUILD_EGL], [1], [build EGL tests])
+    AC_DEFINE(ENABLE_EGL, [1], [Whether EGL support is enabled])
 fi
 
 AM_CONDITIONAL(BUILD_GLX, test x$build_glx = xyes)
diff --git a/meson.build b/meson.build
index 5435f45..226152e 100644
--- a/meson.build
+++ b/meson.build
@@ -51,26 +51,41 @@ elif enable_glx == 'no'
   build_glx = false
 endif
 
+enable_egl = get_option('enable-egl')
+if enable_egl == 'auto'
+  if host_system == 'windows'
+    build_egl = false
+  elif host_system == 'darwin'
+    build_egl = false
+  elif host_system == 'android'
+    build_egl = false
+  else
+    build_egl = true
+  endif
+elif enable_egl == 'yes'
+  build_egl = true
+elif enable_egl == 'no'
+  build_egl = false
+endif
+
 # The remaining platform specific API for GL/GLES are enabled
 # depending on the platform we're building for
 if host_system == 'windows'
-  build_egl = false
   build_apple = false
   build_wgl = true
   has_znow = true
 elif host_system == 'darwin'
-  build_egl = false
   build_apple = true
   build_wgl = false
   has_znow = false
 else
-  build_egl = true
   build_apple = false
   build_wgl = false
   has_znow = true
 endif
 
 conf.set10('ENABLE_GLX', build_glx)
+conf.set10('ENABLE_EGL', build_egl)
 
 # Compiler flags, taken from the Xorg macros
 if cc.get_id() == 'msvc'
diff --git a/meson_options.txt b/meson_options.txt
index 18932f5..244476a 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,3 +6,8 @@ option('enable-glx',
        choices: [ 'auto', 'yes', 'no' ],
        value: 'auto',
        description: 'Enable GLX support')
+option('enable-egl',
+       type: 'combo',
+       choices: [ 'auto', 'yes', 'no' ],
+       value: 'auto',
+       description: 'Enable EGL support')
diff --git a/src/dispatch_common.h b/src/dispatch_common.h
index e3277f7..e16771f 100644
--- a/src/dispatch_common.h
+++ b/src/dispatch_common.h
@@ -24,19 +24,19 @@
 #include "config.h"
 
 #ifdef _WIN32
-#define PLATFORM_HAS_EGL 0
+#define PLATFORM_HAS_EGL ENABLE_EGL
 #define PLATFORM_HAS_GLX ENABLE_GLX
 #define PLATFORM_HAS_WGL 1
 #elif defined(__APPLE__)
-#define PLATFORM_HAS_EGL 0
+#define PLATFORM_HAS_EGL ENABLE_EGL
 #define PLATFORM_HAS_GLX ENABLE_GLX
 #define PLATFORM_HAS_WGL 0
 #elif defined(ANDROID)
-#define PLATFORM_HAS_EGL 1
+#define PLATFORM_HAS_EGL ENABLE_EGL
 #define PLATFORM_HAS_GLX 0
 #define PLATFORM_HAS_WGL 0
 #else
-#define PLATFORM_HAS_EGL 1
+#define PLATFORM_HAS_EGL ENABLE_EGL
 #define PLATFORM_HAS_GLX ENABLE_GLX
 #define PLATFORM_HAS_WGL 0
 #endif
-- 
2.7.4

